package com.eatrip.controller;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.eatrip.bean.DatiLocale;
import com.eatrip.bean.DettagliLocale;
import com.eatrip.service.DatiLocaleService;

@Controller
@RequestMapping(value="/ricerca")
//@SessionAttributes({"dettagliLocale"})
public class RicercaController {
	
	private static final String FILTRI = "filtro";
	private static final String COMUNE = "comune";
	private static final String REGIONE = "regione";
	
	
	@Autowired
	private DatiLocaleService datiLocaleService;
	
	
	@RequestMapping(value="/{filtro}/{luogo}/page/{page}",method = RequestMethod.GET)
	public String ricerca( @PathVariable(value="luogo") String luogo,
						   @PathVariable(value="page") Integer page,
						   @PathVariable(value="filtro") String filtro,
						   //@ModelAttribute DettagliLocale dettagliLocale,
						   Model model,
						   HttpSession session
						  ){
		
		DettagliLocale dettagliLocale = (DettagliLocale) session.getAttribute("dettagliLocale");
		
		//chiamata per ricerca comune
		if (filtro.equals(COMUNE)){
			List<DatiLocale> list = datiLocaleService.getDatiEDettagliLocaleByComuneEDettagli(luogo, page , 5, dettagliLocale);
			if (list != null){
				model.addAttribute("locali", list);
			}
		}//chiamata per ricerca regione
		else if (filtro.equals(REGIONE)){
			List<DatiLocale> list = datiLocaleService.getDatiEDettagliLocaleByRegione(luogo, page, 5, dettagliLocale);
			if (list != null)
				model.addAttribute("locali", list);
		}
		model.addAttribute("filtro", filtro);
		model.addAttribute("luogo", luogo);
		model.addAttribute("pagina", page);
		return "ricerca";
	}
	
	
	@RequestMapping(value="/{filtro}/{luogo}/page/{page}",method = RequestMethod.POST)
	public String ricercaConFiltri( @PathVariable(value="luogo") String luogo,
									@ModelAttribute DettagliLocale dettagliLocale,
								    @PathVariable(value="page") Integer page,
								    @PathVariable(value="filtro") String filtro,
								    @RequestParam(value="luogoDaParam" , required=false) String luogoDaParam,
								    Model model,
								    HttpSession session
									){
		session.setAttribute("dettagliLocale", dettagliLocale);
		//filtro mi serve per capire se è una ricerca per comune, Regione o altro
		if (filtro != null){
			if(filtro.equals(COMUNE)){
				if (luogoDaParam != null){
					/*
					List<DatiLocale> list = datiLocaleService.getDatiEDettagliLocaleByComuneEDettagli(luogoDaParam, page , 5, dettagliLocale);
					if (list != null){
						model.addAttribute("locali", list);
					}
					model.addAttribute("luogo", luogoDaParam);
					*/
					return "redirect:../../../../ricerca/comune/"+luogoDaParam +"/page/"+page;
				}
				else if (!filtro.equals(FILTRI)){
					List<DatiLocale> list = datiLocaleService.getDatiEDettagliLocaleByComuneEDettagli(luogo, page , 5, dettagliLocale);
					model.addAttribute("locali", list);
					model.addAttribute("luogo", luogo);
				}
				else	
					return "error";//aggiungere i messaggi
			}
			else if (filtro.equals(REGIONE)){
				List<DatiLocale> list = datiLocaleService.getDatiEDettagliLocaleByRegione(luogo, page, 5, dettagliLocale);
				model.addAttribute("locali", list);
				model.addAttribute("luogo", luogo);
			}
		}
		model.addAttribute("filtro", filtro);
		model.addAttribute("dettagliLocale", dettagliLocale);
		model.addAttribute("pagina", page);
		return "ricerca";
	}
	
}
